package com.malou.client.reportes;

import java.util.Date;
import java.util.List;

import com.extjs.gxt.ui.client.data.BeanModel;
import com.extjs.gxt.ui.client.event.ButtonEvent;
import com.extjs.gxt.ui.client.event.ComponentEvent;
import com.extjs.gxt.ui.client.event.Events;
import com.extjs.gxt.ui.client.event.Listener;
import com.extjs.gxt.ui.client.event.SelectionListener;
import com.extjs.gxt.ui.client.util.IconHelper;
import com.extjs.gxt.ui.client.widget.Component;
import com.extjs.gxt.ui.client.widget.ContentPanel;
import com.extjs.gxt.ui.client.widget.Label;
import com.extjs.gxt.ui.client.widget.LayoutContainer;
import com.extjs.gxt.ui.client.widget.Status;
import com.extjs.gxt.ui.client.widget.button.Button;
import com.extjs.gxt.ui.client.widget.form.ComboBox;
import com.extjs.gxt.ui.client.widget.form.ComboBox.TriggerAction;
import com.extjs.gxt.ui.client.widget.form.DateField;
import com.extjs.gxt.ui.client.widget.form.FormPanel;
import com.extjs.gxt.ui.client.widget.form.FormPanel.LabelAlign;
import com.extjs.gxt.ui.client.widget.layout.CenterLayout;
import com.extjs.gxt.ui.client.widget.layout.ColumnData;
import com.extjs.gxt.ui.client.widget.layout.ColumnLayout;
import com.extjs.gxt.ui.client.widget.layout.FormData;
import com.extjs.gxt.ui.client.widget.layout.FormLayout;
import com.extjs.gxt.ui.client.widget.toolbar.ToolBar;
import com.google.gwt.core.client.GWT;
import com.google.gwt.i18n.client.DateTimeFormat;
import com.google.gwt.i18n.client.NumberFormat;
import com.google.gwt.user.client.Element;
import com.malou.client.MalouConstants;
import com.malou.client.util.MyNumberFormat;
import com.malou.client.util.Utilities;
import com.malou.client.ventas.tienda.Tiendas;

public class ResumenPanel extends ContentPanel {
	private MalouConstants constants = GWT.create(MalouConstants.class);
	public FormPanel portletResumen;
	

	private ComboBox<BeanModel> tienda;
	private Label tiendaL;
	public Status status;
	public Button find;
	
	private BalanceTienda blt;
	private DateField fecha;

	private LayoutContainer caja;
	private LayoutContainer gasto;
	private LayoutContainer ingreso;
	private LayoutContainer ventas;
	private LayoutContainer tarjeta;
	private LayoutContainer saldos;
	private LayoutContainer cambiosrecibir;
	
	private LayoutContainer lblcaja;
	private LayoutContainer lblventa;
	private LayoutContainer lblingreso;
	private LayoutContainer lbltarjeta;
	private LayoutContainer lblsaldo;
	private LayoutContainer lblgasto;
	private LayoutContainer lblcambiosrecibir;
	
	private LayoutContainer lc_suma01;
	private LayoutContainer lc_suma02;
	private LayoutContainer lc_suma03;
	private LayoutContainer lc_suma04;
	private LayoutContainer lc_suma05;
	private LayoutContainer lc_suma06;
	
	

	private Label valcaja;
	private Label valgasto;
	private Label valingreso;
	private Label valseparacion;
	private Label valventas;
	private Label valtarjeta;
	private Label valsaldos;
	private Label valingresos;
	private Label valcambiosrecibir;
	private Label valcambiosdevolver;
	
	private Label lblsuma1;
	private Label lblsuma2;
	private Label lblsuma3;
	private Label lblsuma4;
	private Label lblsuma5;
	private Label lblsuma6;
	
	


	@Override
	protected void onRender(Element parent, int index) {
		super.onRender(parent, index);
		tienda.setRawValue(Utilities.tienda);
	}

	public ResumenPanel() {
		setLayout(new CenterLayout());
		setIcon(IconHelper.createPath("images/icons/table.png"));
		setHeading(constants.resumenDia());
		setBodyStyle("backgroundColor:#D5D5D5;");
		
		lblcaja=new LayoutContainer();
		setPropiedad(lblcaja);
		
		lblingreso=new LayoutContainer();
		setPropiedad(lblingreso);
		
		lblsaldo=new LayoutContainer();
		setPropiedad(lblsaldo);
		
		lbltarjeta=new LayoutContainer();
		setPropiedad(lbltarjeta);
		
		lblventa=new LayoutContainer();
		setPropiedad(lblventa);
		
		lblgasto=new LayoutContainer();
		setPropiedad(lblgasto);
		
		lblcambiosrecibir = new LayoutContainer();
		setPropiedad(lblcambiosrecibir);		
		
		caja = new LayoutContainer();
		setPropiedad(caja);
		
		gasto = new LayoutContainer();
		setPropiedad(gasto);
		
		ingreso = new LayoutContainer();
		setPropiedad(ingreso);
		
		ventas = new LayoutContainer();
		setPropiedad(ventas);
				
		tarjeta = new LayoutContainer();
		setPropiedad(tarjeta);
		
		saldos = new LayoutContainer();
		setPropiedad(saldos);
		
		cambiosrecibir = new LayoutContainer();
		setPropiedad(cambiosrecibir);
		
		lc_suma01 = new LayoutContainer();
		lc_suma01.setStyleAttribute("marginLeft", "202px");
		setPropiedad(lc_suma01);
		lc_suma01.setStyleAttribute("backgroundColor", "#F4F809");
		
		lc_suma02 = new LayoutContainer();
		lc_suma02.setStyleAttribute("marginLeft", "202px");
		setPropiedad(lc_suma02);
		lc_suma02.setStyleAttribute("backgroundColor", "#E3AFF7");
		
		lc_suma03 = new LayoutContainer();
		lc_suma03.setStyleAttribute("marginLeft", "202px");
		setPropiedad(lc_suma03);
		lc_suma03.setStyleAttribute("backgroundColor", "#9DFA98");
		
		lc_suma04 = new LayoutContainer();
		lc_suma04.setStyleAttribute("marginLeft", "202px");
		setPropiedad(lc_suma04);
		lc_suma04.setStyleAttribute("backgroundColor", "#F5C181");
		
		lc_suma05 = new LayoutContainer();
		lc_suma05.setStyleAttribute("marginLeft", "202px");
		setPropiedad(lc_suma05);
		lc_suma05.setStyleAttribute("backgroundColor", "#F09A9A");

		lc_suma06 = new LayoutContainer();
		lc_suma06.setStyleAttribute("marginLeft", "202px");
		setPropiedad(lc_suma06);
		lc_suma06.setStyleAttribute("backgroundColor", "#F09A9A");

		

		valcaja = new Label();
		setProepiedad(valcaja);

		valgasto = new Label();
		setProepiedad(valgasto);

		valingreso = new Label();
		setProepiedad(valingreso);

		valseparacion = new Label();
		setProepiedad(valseparacion);
		
		valventas = new Label();
		setProepiedad(valventas);

		valtarjeta = new Label();
		setProepiedad(valtarjeta);

		valsaldos = new Label();
		setProepiedad(valsaldos);
		
		valingresos = new Label();
		setProepiedad(valingresos);
		
		valcambiosrecibir = new Label();
		setProepiedad(valcambiosrecibir);
		
		valcambiosdevolver = new Label();
		setProepiedad(valcambiosdevolver);
						
		lblsuma1 = new Label();
		setProepiedad(lblsuma1);
		
		lblsuma2 = new Label();
		setProepiedad(lblsuma2);
		
		lblsuma3 = new Label();
		setProepiedad(lblsuma3);

		lblsuma4 = new Label();
		setProepiedad(lblsuma4);
		
		lblsuma5 = new Label();
		setProepiedad(lblsuma5);

		lblsuma6 = new Label();
		setProepiedad(lblsuma6);
		
		portletResumen = new FormPanel();
		portletResumen.setBorders(false);
		portletResumen.setFrame(true);
		portletResumen.setBodyStyle("backgroundColor:#D5D5D5;");
		portletResumen.setHeaderVisible(false);
		portletResumen.setHeading(constants.resumenTotal());
		portletResumen.setSize(400, 480);

		
		Tiendas.getComboTienda();
		tienda = new ComboBox<BeanModel>();
		tienda.setEditable(false);
		tienda.setDisplayField("nombre");
		tienda.setWidth(150);
		tienda.setStore(Tiendas.storeCombo);
		tienda.setTypeAhead(true);
		tienda.setTriggerAction(TriggerAction.ALL);
		tienda.setValueField("nombre");
		tienda.setUseQueryCache(false);
		tienda.setAllowBlank(true);

		ToolBar toolBar = new ToolBar();

		tiendaL = new Label(constants.graficosTienda());
		toolBar.add(tiendaL);
		toolBar.add(tienda);

		fecha = new DateField();
		fecha.setFieldLabel(constants.resumenFecha());
		fecha.getPropertyEditor().setFormat(DateTimeFormat.getFormat("yyyy-MM-dd"));
		fecha.setAllowBlank(false);
		fecha.setValue(new Date());
		fecha.getDatePicker().addListener(Events.Select, new Listener<ComponentEvent>() {
			public void handleEvent(ComponentEvent be) {
				buscar();
						}

		});
		

		Label fechaL = new Label(constants.resumenFecha() + ": ");
		fechaL.setStyleAttribute("paddingLeft", "20px");

		toolBar.add(fechaL);
		toolBar.add(fecha);

		status = new Status();
		status.setBusy(constants.cargando());
		status.hide();
		status.setAutoWidth(true);
		status.setStyleAttribute("paddingLeft", "20px");
		toolBar.add(status);

		find = new Button(constants.find(),
				IconHelper.createPath("images/icons/find.png"));
		find.setStyleAttribute("paddingLeft", "20px");

		find = new Button(constants.find(),
				IconHelper.createPath("images/icons/find.png"));
		find.setStyleAttribute("paddingLeft", "20px");
		find.addSelectionListener(new SelectionListener<ButtonEvent>() {
			@Override
			public void componentSelected(ButtonEvent ce) {
				if (validate()) 
					buscar();
							
			}
		
		
		});

		lc_suma01.add(setLayout(lblsuma1), new ColumnData(1));
		lc_suma02.add(setLayout(lblsuma2), new ColumnData(1));
		lc_suma03.add(setLayout(lblsuma3), new ColumnData(1));
		lc_suma04.add(setLayout(lblsuma4), new ColumnData(1));
		lc_suma05.add(setLayout(lblsuma5), new ColumnData(1));
		lc_suma06.add(setLayout(lblsuma6), new ColumnData(1));
		
		lblventa.add(setLayout(setLabel(constants.resumenVentasEs())),	new ColumnData(1));
		lblventa.add(setLayout(setLabel(constants.resumenSeparacionesEs())),new ColumnData(1));
		ventas.add(setLayout(valventas), new ColumnData(1));
		ventas.add(setLayout(valseparacion), new ColumnData(1));
		
		lblcaja.add(setLayout(setLabel(constants.resumenCajaInicial())),new ColumnData(1));
		caja.add(setLayout(valcaja), new ColumnData(1));
	
		
		lbltarjeta.add(setLayout(setLabel(constants.resumenTarjetasEs())),	new ColumnData(1));
		tarjeta.add(setLayout(valtarjeta), new ColumnData(1));
		
		lblgasto.add(setLayout(setLabel(constants.resumenGastosEs())),new ColumnData(1));
		gasto.add(setLayout(valgasto), new ColumnData(1));
		
		lblsaldo.add(setLayout(setLabel(constants.resumenSaldoEs())),new ColumnData(1));
		saldos.add(setLayout(valsaldos), new ColumnData(1));
		
		lblingreso.add(setLayout(setLabel(constants.resumenIngreso())),new ColumnData(1));
		ingreso.add(setLayout(valingresos), new ColumnData(1));
		
		lblcambiosrecibir.add(setLayout(setLabel(constants.IngresoxCambio())),new ColumnData(1));
		lblcambiosrecibir.add(setLayout(setLabel(constants.SalidaxCambio())),new ColumnData(1));
		cambiosrecibir.add(setLayout(valcambiosrecibir), new ColumnData(1));
	    cambiosrecibir.add(setLayout(valcambiosdevolver),new ColumnData(1));
		
		LayoutContainer lc=new LayoutContainer();
		lc.setLayout(new ColumnLayout());
		lc.add(setLayout2(lblventa,"99%"),new ColumnData(.55));
		lc.add(ventas,new ColumnData(.45));
		
		LayoutContainer lc1=new LayoutContainer();
		lc1.setLayout(new ColumnLayout());
		lc1.add(setLayout2(lblcaja,"99%"),new ColumnData(.55));
		lc1.add(caja,new ColumnData(.45));
		
		
		LayoutContainer lc2=new LayoutContainer();
		lc2.setLayout(new ColumnLayout());
		lc2.add(setLayout2(lblingreso,"99%"),new ColumnData(.55));
		lc2.add(ingreso,new ColumnData(.45));
		
		LayoutContainer lc3=new LayoutContainer();
		lc3.setLayout(new ColumnLayout());
		lc3.add(setLayout2(lbltarjeta,"99%"),new ColumnData(.55));
		lc3.add(tarjeta,new ColumnData(.45));
		
		LayoutContainer lc4=new LayoutContainer();
		lc4.setLayout(new ColumnLayout());
		lc4.add(setLayout2(lblgasto,"99%"),new ColumnData(.55));
		lc4.add(gasto,new ColumnData(.45));
		
		LayoutContainer lc5=new LayoutContainer();
		lc5.setLayout(new ColumnLayout());
		lc5.add(setLayout2(lblsaldo,"99%"),new ColumnData(.55));
		lc5.add(saldos,new ColumnData(.45));
		
		LayoutContainer lc6=new LayoutContainer();
		lc6.setLayout(new ColumnLayout());
		lc6.add(setLayout2(lblcambiosrecibir,"99%"),new ColumnData(.55));
		lc6.add(cambiosrecibir,new ColumnData(.45));
		
		portletResumen.add(lc);
		portletResumen.add(lc_suma01);
		portletResumen.add(lc6);
		portletResumen.add(lc_suma06);
		portletResumen.add(lc1);
		portletResumen.add(lc_suma02);
		portletResumen.add(lc2);
		portletResumen.add(lc_suma03);
		portletResumen.add(lc3);
		portletResumen.add(lc_suma04);
		portletResumen.add(lc4);
		portletResumen.add(lc_suma05);
		portletResumen.add(lc5);
		
		setTopComponent(toolBar);
		toolBar.add(find);
		add(portletResumen);
		buscar();

	}

	public void cargarDatos(BalanceTienda result) {
		
		NumberFormat format=MyNumberFormat.getCurrencyFormat("PEN");
		
		Double cajainicial=result.getSaldoinicial();
		Double separacion=result.getIngresoseparaciones();
		Double tarjeta=result.getTotaltarjetas();
		Double gasto=result.getGastos();
		Double ventas=result.getIngresoventas();
		Double ingresos=result.getOtrosingresos();
		Double cambiosrecibir = result.getTotal_cambio_recibir();
		Double cambiosdevolver = result.getTotal_cambio_devolver();
		
		valcaja.setText(""+format.format(cajainicial));
		valcaja.getElement().getParentElement().setClassName("label-resumen-dia");
		
		valseparacion.setText(""+format.format(separacion));
		valseparacion.getElement().getParentElement().setClassName("label-resumen-dia");
		
		valtarjeta.setText(""+format.format(tarjeta));
		valtarjeta.getElement().getParentElement().setClassName("label-resumen-dia");
		
		
		valgasto.setText(""+format.format(gasto));
		valgasto.getElement().getParentElement().setClassName("label-resumen-dia");
		
		valventas.setText(""+format.format(ventas));
		valventas.getElement().getParentElement().setClassName("label-resumen-dia");
		
		valingresos.setText(""+format.format(ingresos));
		valingresos.getElement().getParentElement().setClassName("label-resumen-dia");
		
		valcambiosrecibir.setText(""+format.format(cambiosrecibir));
		valcambiosrecibir.getElement().getParentElement().setClassName("label-resumen-dia");
		
		valcambiosdevolver.setText(""+format.format(cambiosdevolver));
		valcambiosdevolver.getElement().getParentElement().setClassName("label-resumen-dia");
			
			
		Double d_suma01=ventas+separacion;
		lblsuma1.setText(""+format.format(d_suma01));
		lblsuma1.getElement().getParentElement().setClassName("label-resumen-dia");
		
		Double d_suma06=(d_suma01+cambiosrecibir-cambiosdevolver);
		lblsuma6.setText(""+format.format(d_suma06));
		lblsuma6.getElement().getParentElement().setClassName("label-resumen-dia");
		
		Double d_suma02=(d_suma06+cajainicial);
		lblsuma2.setText(""+format.format(d_suma02));
		lblsuma2.getElement().getParentElement().setClassName("label-resumen-dia");
		
		
		Double d_suma03=(d_suma02+ingresos);
		lblsuma3.setText(""+format.format(d_suma03));
		lblsuma3.getElement().getParentElement().setClassName("label-resumen-dia");
		
		
		Double d_suma04=(d_suma03-tarjeta);
		lblsuma4.setText(""+format.format(d_suma04));
		lblsuma4.getElement().getParentElement().setClassName("label-resumen-dia");
		
		
		Double d_suma05=(d_suma04-gasto);
		lblsuma5.setText(""+format.format(d_suma05));
		lblsuma5.getElement().getParentElement().setClassName("label-resumen-dia");
	
		
		valsaldos.setText(""+format.format(d_suma05));
		valsaldos.getElement().getParentElement().setClassName("label-resumen-dia");
		
		
	}

	private boolean validate() {
		boolean des = fecha.isValid();
		boolean tien = tienda.isValid();
		return des && tien;
	}

	private void buscar() {
		status.show();
		find.hide();

		final ResumenPanel rpan = this;
		blt = new BalanceTienda();
		blt.setFecharesumen(fecha.getValue());

		if (tienda.getValue() != null)
			blt.setTienda_id(Integer.parseInt(tienda.getValue().get("id")
					.toString()));

		Reportes.rpan = rpan;
		Reportes.setBalanceTienda(blt);

	}

	public void setPermisos(List<String> permisos) {
		boolean todas = permisos.contains("lastiendas");
		boolean su = permisos.contains("sutienda");

		if (todas) {
			tiendaL.setVisible(true);
			tienda.setEnabled(true);
			tienda.setVisible(true);
		} else if (su) {
			tiendaL.setVisible(false);
			tienda.setEnabled(false);
			tienda.setVisible(false);
		}
	}

	private LayoutContainer setLayout(Component comp) {
		LayoutContainer layout = new LayoutContainer();
		layout.add(comp);

		return layout;
	}

	private LayoutContainer setLayout2(Component comp,String form) {
		LayoutContainer layout = new LayoutContainer();
		
		FormLayout fl = new FormLayout(LabelAlign.LEFT);
		fl.setLabelWidth(0);
		layout.setLayout(fl);
		layout.add(comp, new FormData(form));

		return layout;
	}
	
	private Label setLabel(String title) {
		Label label = new Label(title);
		label.setStyleAttribute("fontSize", "15px");

		return label;

	}

	private void setProepiedad(Label label) {
		label.setText("0.0");
		label.setStyleAttribute("fontSize", "15px");
		label.setStyleAttribute("marginLeft", "14px");
		label.setStyleAttribute("color", "blue");

	}
	private void setPropiedad(LayoutContainer lc){
		lc.setLayout(new ColumnLayout());
		lc.setStyleAttribute("marginTop", "4px");
		lc.setStyleAttribute("padding", "4px");
		lc.setStyleAttribute("backgroundColor", "white");
		lc.setBorders(true);
		
	}
	

}
